package com.stack.knowyoudao.dao;

import com.stack.knowyoubean.bean.KnowLedge;
import org.apache.ibatis.annotations.*;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * 知识点的持久层
 *
 * @author stack
 */
@Component
@Scope("singleton")
@CacheNamespace
public interface KnowLedgeDao {

    /**
     * 查询课程拥有的知识点
     *
     * @param sid 课程号
     * @return 课程知识点编号列表
     */
    @Select("select kid from knowledge where sid=#{sid}")
    List<Integer> knowLedgeBySid(@Param("sid") Integer sid);

    /**
     * 知识点数量
     *
     * @param sid    课程号
     * @param kname  知识点名
     * @param kclass 知识点类型
     * @param kchap  知识点章节
     * @param page   页码
     * @param limit  条数
     * @return 知识点数量
     */
    @Select("<script>" +
            "select count(*) from knowledge where sid = #{sid}" +
            "<if test=\" kname!=null and kname != '' \"> and kname like #{kname} </if>" +
            "<if test=\" kclass!=null and kclass != '' \"> and kclass like #{kclass} </if>" +
            "<if test=\" kchap!=null and kchap != '' \"> and kchap like  #{kchap} </if>" +
            "</script>")
    Integer findKnowLedgeCount(@Param("sid") Integer sid, @Param("kname") String kname, @Param("kclass") String kclass, @Param("kchap") String kchap, @Param("page") Integer page, @Param("limit") Integer limit);

    /**
     * 知识点集合
     *
     * @param sid    课程号
     * @param kname  知识点名
     * @param kclass 知识点类型
     * @param kchap  知识点章节
     * @param page   页码
     * @param limit  条数
     * @return 知识点集合
     */
    @Select("<script>" +
            "select * from knowledge where sid = #{sid} " +
            "<if test=\" kname!=null and kname != '' \"> and kname like  #{kname} </if>" +
            "<if test=\" kclass!=null and kclass != '' \"> and kclass like  #{kclass} </if>" +
            "<if test=\" kchap!=null and kchap != '' \"> and kchap like  #{kchap} </if>" +
            "limit #{page},#{limit}" +
            "</script>")
    List<KnowLedge> findKnowLedge(@Param("sid") Integer sid, @Param("kname") String kname, @Param("kclass") String kclass, @Param("kchap") String kchap, @Param("page") Integer page, @Param("limit") Integer limit);

    /**
     * 知识点集合教师
     *
     * @param sid 课程号
     * @return 知识点集合
     */
    @Select("select * from knowledge where sid = #{sid} ")
    List<KnowLedge> findKnowLedgeForTc(@Param("sid") Integer sid);


    /**
     * 知识点添加
     *
     * @param knowLedge 知识点实体
     * @return 添加成功的标记
     */
    @Insert("insert into knowledge(kname,krelated,kclass,kchap,kdesc,kurl,sid) values(#{kname},#{krelated},#{kclass},#{kchap},#{kdesc},#{kurl},#{sid})")
    int insertKnowLedge(KnowLedge knowLedge);

    /**
     * 知识点更新
     *
     * @param knowLedge 知识点实体
     * @return 更新成功的标记
     */
    @Update("update knowledge set kname=#{kname},krelated=#{krelated},kclass=#{kclass},kchap=#{kchap},kdesc=#{kdesc},kurl=#{kurl} where kid=#{kid}")
    int updateKnowLedge(KnowLedge knowLedge);


    /**
     * 删除知识点
     *
     * @param kid 知识点编号
     * @return 删除标记
     */
    @Delete("delete from knowledge where kid=#{kid}")
    int deleteKnowLedge(Integer kid);

}
